package cn.tedu.net.collection.exception;

import javafx.scene.transform.Scale;

import java.util.InputMismatchException;
import java.util.Scanner;

//本类用于测试异常的入门案例
/*
如果方法抛出异常,那么谁调用,谁需要解决(继续抛出/捕获解决)
所以main()调用了method2(),如果main()不捕获处理,就也需要抛出异常
注意:我们一般再main()调用之前捕获解决异常,而不应是把问题报给main()
因为没人解决了.
 */
public class Test1_ExceptionDemo {
    public static void main(String[] args) throws Exception {
//        method();//调用method()
//        method1();//调用method1()
          method2();
    }
    /*
    创建method2(),练习Bug解决方案二
    抛出的语法规则:
    在可能出现异常的方法上加上throws异常类型
    在抛出时,也可以使用多态,不管是发生了什么异常,统统被Exception
     */
    public static void method2() throws Exception{
        System.out.print("请输出你要输入的第一个整数:");
        int a = new Scanner(System.in).nextInt();
        System.out.print("请输入你要输入的第二个整数:");
        int b = new Scanner(System.in).nextInt();
        System.out.println("除法运算的结果为:" + a / b);
    }

    /*创建method1()方法练习Bug解决方案一:
        捕获语法规则:
        try{
            可能会出现异常的代码
        }catch(异常类型 异常名字){
            如果捕获到异常的对应解决方案
        }
    */
    public static void method1() {
            try {
                System.out.print("请输出你要输入的第一个整数:");
                int a = new Scanner(System.in).nextInt();
                System.out.print("请输入你要输入的第二个整数:");
                int b = new Scanner(System.in).nextInt();
                System.out.println("除法运算的结果为:" + a / b);
            } catch (InputMismatchException e) {//异常捕获一
                System.out.println("请输入整数");
            } catch (ArithmeticException e) {//异常捕获2
                System.out.println("除数不能为0");
            } catch (Exception e){
            /*如果有其它异常用Exception匹配捕获,多态的经典用法,不关心子类的子态(子类异常的类型)
            只要是可以解决的异常都是Exception的子类,多态会把这些当作父类来看 ,进而捕获,使用通用来解决
            */
                System.out.println("请输入正确的整数");
            }
        /*如果发生异常被捕获就会执行此处被匹配到的解决方案
          由于程序中可能出现多种异常,所以catch可以配合多次使用
         */
        }
    //创建method()用来人为的暴露异常
    public static void method(){
        System.out.print("请输出你要输入的第一个整数:");
        int a =new Scanner(System.in).nextInt();
        System.out.print("请输入你要输入的第二个整数:");
        int b =new Scanner(System.in).nextInt();
        //输入8,2.2报错 InputMismatchException 输入不匹配异常
        //输入9,0  报错 ArithmeticException 算术异常 除数不能为0
        System.out.println("除法运算的结果为:"+a/b);
        /*
        1.学会看报错信息的错误提示,确定自己的错误方向
        2.学会看报错信息的行号提示,哪里报错找哪里,源码不会错看自己写的代码
         */

    }
}
